# -*- coding: utf-8 -*-
# 四川省公共资源交易信息网的数据获取类：
# by lw 2023-11-4

from bs4 import BeautifulSoup
from models.projectindex import ProjectIndex
from models.project import Project
from public.http_method.http_method import http_post
from public.string_utils import *
from public.content_indentify import *
from downloaders.downloader import Downloader


class Downloader_PR_SC(Downloader):

    def __init__(self):
        """空构造函数"""
        # API接口的访问地址：
        url = 'https://ggzyjy.sc.gov.cn/inteligentsearch/rest/inteligentSearch/getFullTextData'
        # API接口的访问参数（body参数）：
        params = {
            "token": "",
            "pn": 0,
            "rn": 10,  #分页控制
            "sdt": "2022-01-01 00:00:00",  #起始时间
            "edt": "2022-12-31 23:59:59",  #结束时间
            "wd":
            "%E9%81%A5%E6%84%9F%20%E4%B8%AD%E6%A0%87%E7%BB%93%E6%9E%9C",  #关键词
            "inc_wd": "",
            "exc_wd": "",
            "fields": "title;content",
            "cnum": "",
            "sort": "",
            "ssort": "title",
            "cl": 500,
            "terminal": "",
            "condition": "null",
            "time": "null",
            "highlights": "title;content",
            "statistics": "null",
            "unionCondition": "null",
            "accuracy": "",
            "noParticiple": "0",
            "searchRange": "null"
        }
        # 头格式
        # headers = {
        #     "Content-Type":
        #     "application/json",
        #     'User-Agent':
        #     'Mozilla/5.0(Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
        # }
        super().__init__("https://ggzyjy.sc.gov.cn", "四川省公共资源交易信息网", "四川省|重庆市",
                         url, "POST")
        self.set_params(params)

    def set_limit_time(self, starttime, endtime):
        """设置数据时间段限制条件"""
        self.params['sdt'] = self.limit_time['starttime'] = starttime
        self.params['edt'] = self.limit_time['endtime'] = endtime

    def set_keyword(self, keyword):
        """设置数据查询关键词"""
        self.keyword = keyword
        self.params['wd'] = self.url_quote(keyword)

    def try_get_datas(self) -> bool:
        """尝试获取数据，这个是用来获取数据总数的
            
        Returns:
            bool: 是否获取数据成功
        """
        params = self.params
        rn = params['rn']
        params['rn'] = 1
        r = http_post(self.url, data=None, json=params)
        if r == None:
            return False
        self.total_record = r['result']['totalcount']
        print(self.total_record)
        if self.total_record == 0:
            return False
        # if rn >= self.total_record:
        #     rn = self.total_record - 1
        params['rn'] = rn
        return True

    def get_datas(self) -> [ProjectIndex]:
        """获取当前页项目索引数据
            
        Returns:
            []: ProjectIndex数组
        """
        r = http_post(self.url, data=None, json=self.params)
        # # 输出来看看样本数据：
        # json_str = json.dumps(r, indent=4, ensure_ascii=False)
        # print("data on a page:", json_str)
        # # ------------------
        self.total_record = r['result']['totalcount']  #实时修正总记录
        results = r['result']['records']
        datas = []
        for result in results:
            d = self.build_project_index(data=result)
            datas.append(d)
        return datas

    def build_project_index(self, data) -> ProjectIndex:
        """创建项目索引
            # 数据示例：
            # {'categorynum': '019002002',
            # 'titlenew': '2022年度0.3米遥感影像(JJQ22C00093)中标（成交）结果公告',
            # 'zhuanzai': ['重庆市公共资源交易中心'],
            # 'sysclicktimes': 0, 'ordernum': 0,
            # 'title': "2022年度0.3米<em style='color:red'>遥感</em>影像(JJQ22C00093)
            # <em style='color:red'>中标</em>（成交）<em style='color:red'>结果</em>公告",
            # 'content': "      一、项目号：JJQ22C00093 采购执行编号：ACZB-ZFCG-2022062C 采购方式：竞争性磋商   二、项目名称：2022年度0.3米<em style='color:red'>遥感</em>影像  三、<em style='color:red'>中标</em>（成交）信息：  包号：1  供应商名称：重庆市地理信息和<em style='color:red'>遥感</em>应用中心  供应商地址：重庆市江北区电测村231号  <em style='color:red'>中标</em>（成交）金额： 1,080,000.00元   四、主要标的信息        包号：1                   名称       服务范围        服务要求        服务时间        服务标准                 2022年度0.3米<em style='color:red'>遥感</em>影像        采购人指定地点。        详见竞争性磋商文件        合同签订之日起至2022年12月30日。        详见竞争性磋商文件                五、评审专家名单  欧义兵，张军，李晓东  六、代理服务收费标准及金额   代理服务收费标准：详见竞争性磋商文件   代理服务费总计：15640.0元  七、公告期限  公告期限：1个工作日  八、其他补充事宜    九、凡...",
            # 'webdate': '2022-09-09 00:00:00', 'userguid': [''], 'tradingsourcevalue': ['c002'], 'tradetypevalue': ['no'], 'istop': 0, 'systags': [''], 'syscategory': '001', ...}
        Args:
            data (_type_): 数据内容字符串

        Returns:
            ProjectIndex: 一条项目索引
        """
        d = ProjectIndex()
        #关联设置的字段：
        d.datasourceId = 0  # 数据源标识码（来源站点标识码）
        d.tid = 0  # 任务标识码
        # 直接获取的数据：
        d.linkurl = data['linkurl']
        d.region = "四川省"
        d.publishTime = data['webdate']
        return d

    def to_next_page(self) -> bool:
        """移动到下一页

        Returns:
            bool: 是否成功移动到下一页
        """
        if super().to_next_page():
            self.params['pn'] = self.curpage * self.page_size
            # rn = (self.curpage + 1) * self.page_size - 1
            # if rn > self.total_record:
            #     rn = self.total_record
            # self.params['rn'] = rn
            return True
        else:
            return False

if __name__ == '__main__':
    test = Downloader_PR_SC()
    print(test.try_get_datas())